import router from "@/router";
export default {
  state() {
    return {
      // tabs的初始数据
      tabsList: [
        {
          meta: { title: "home" },
          path: "/index/homepage",
          name: "homepage",
        },
      ],
    };
  },
  getters: {},
  mutations: {
    // 添加tab标签并，储存缓存页面
    addTab(state, data) {
      let tabsList = state.tabsList;
      let { path, name, meta, query, params } = data;
      if (name == "login") return tabsList.splice(1); //如果为登录页跳转的页面，不添加且只保留首页
      // 判断是否有重复标签
      let bool = tabsList.find((item) => item.name == name);
      // 编辑是否同商品没有就添加
      let id = tabsList.find((item) => item.params?.id == params.id);
      // 添加标签页
      if (!id || (!bool && name != "flush")) {
        //并且不为刷新页
        if (name != "edit" && name != "create") {
          //不为添加和编辑商品
          tabsList.push({ path, name, meta, query, params });
          return;
        }
        let index = tabsList.findIndex((item) => item.name == "productlist"); //获取商品列表的位置
        if (index != -1) {
          //如果存在商品列表
          tabsList.splice(index + 1, 0, { path, name, meta, query, params });
          return;
        }
        tabsList.push({ path, name, meta, query, params }); //添加到末尾
      }
    },
    // tab切换
    tabCut(state, index) {
      let tag = state.tabsList[index];
      if (tag.path != router.currentRoute.value.path) {
        router.push({ path: tag.path });
      }
    },
    // 关闭tab页
    tabClose(state, index) {
      let tag = state.tabsList[index];
      let tabsList = state.tabsList;
      // 判断是否为选中的标签
      if (tag.path == router.currentRoute.value.path) {
        // 获取跳转的nam
        let path = (tabsList[index + 1] || tabsList[index - 1]).path; //在左边成立时，右边不执行，在左边不成立时，执行右边
        router.push({ path });
      }
      tabsList.splice(index, 1);
    },
    // 刷新的函数
    renovate(state, data) {
      let tag = state.tabsList[data.index];
      router.replace({ path: "/index/flush", query: { path: tag.path } });
    },
    // 关闭所有和右侧的方法
    closeAllRightTab(state, data) {
      let tag = state.tabsList[data.index];
      //  获取选中的标签所在的位置
      let activeIndex = state.tabsList.findIndex(
        (item) => item.path == router.currentRoute.value.path
      );
      // 小于当前选中标签时跳转路由
      if (data.index < activeIndex) {
        router.push(tag.path);
      }
      // 删除对应的标签
      state.tabsList.splice(data.index + 1);
    },
  },
  actions: {
    addTab(context, data) {
      context.commit("addTab", data);
    },
    tabCut(context, index) {
      context.commit("tabCut", index);
    },
    tabClose(context, index) {
      context.commit("tabClose", index);
    },
    renovate(context, data) {
      context.commit("renovate", data);
    },
    closeAllRightTab(context, data) {
      context.commit("closeAllRightTab", data);
    },
  },
};
